LINQ to Entities (LINQ with Entity Framework)

Microsoft Technologies - লিংক (LinQ)
242
242

LINQ to Entities হল LINQ (Language Integrated Query) এর একটি বিশেষ প্রকার, যা Entity Framework (EF) ব্যবহার করে ডেটাবেসের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে। এটি আপনাকে .NET এ ডেটাবেসে সংরক্ষিত ডেটার উপর প্রশ্ন করতে এবং এটি সহজেই ম্যানিপুলেট করতে সাহায্য করে, তবে SQL কোড লেখার প্রয়োজন হয় না। LINQ to Entities ব্যবহার করে আপনি ডেটাবেসের টেবিলগুলোর উপর কুয়েরি করতে পারেন, যা Entity Framework দ্বারা মডেল করা হয়েছে।


Entity Framework (EF) এর ভূমিকা

Entity Framework (EF) হল একটি Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক, যা আপনাকে ডেটাবেসের রিলেশনাল তথ্যকে অবজেক্ট ও ক্লাসের রূপে পরিণত করতে সহায়তা করে। EF এর মাধ্যমে, আপনি LINQ কুয়েরি ব্যবহার করে ডেটাবেসের তথ্য গ্রহণ এবং ম্যানিপুলেট করতে পারেন, এটি SQL কোড লেখার প্রয়োজন ছাড়াই।

LINQ to Entities EF এর উপরে কাজ করে এবং ডেটাবেসের টেবিলগুলিকে সি# ক্লাস হিসেবে প্রজেক্ট করে, যাতে আপনি LINQ কুয়েরি ব্যবহার করতে পারেন।


LINQ to Entities এর প্রধান বৈশিষ্ট্য

  • এফফিসিয়েন্ট ডেটাবেস ইন্টারঅ্যাকশন: LINQ to Entities ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার সময় SQL কোডের প্রয়োজনীয়তা কমিয়ে দেয়। এটি আপনাকে ডেটাবেস অপারেশন যেমন Select, Insert, Update, এবং Delete সম্পাদন করতে সাহায্য করে।
  • কোডের সিম্পলনেস: SQL কোডের পরিবর্তে C# কোডে LINQ ব্যবহার করা হয়, ফলে কোড সহজ এবং রিডেবল হয়।
  • ডাটাবেস থেকে পেজড ডেটা (Paging) রিটার্ন করা: LINQ কুয়েরি আপনাকে ডেটাবেস থেকে পেজিং করা ডেটা রিটার্ন করতে সাহায্য করে, যেমন কিছু নির্দিষ্ট পরিমাণ রেকর্ড প্রাপ্তি।
  • লেজি লোডিং (Lazy Loading): Entity Framework তে লেজি লোডিং ব্যবহার করা সম্ভব, যার মাধ্যমে সম্পর্কিত ডেটা কেবলমাত্র প্রয়োজন হলে লোড হয়।
  • এগজ্যাক্ট SQL: EF আপনাকে যে SQL কুয়েরি তৈরি করেছে, তা দেখতে পারবেন এবং প্রয়োজনে কাস্টম SQL কুয়েরি ব্যবহার করতে পারবেন।

LINQ to Entities কুয়েরি তৈরি করা

LINQ to Entities ব্যবহার করার জন্য প্রথমে Entity Framework মডেল তৈরি করতে হয়, যেটি ডেটাবেস টেবিলের সাথে সম্পর্কিত ক্লাস এবং ডেটাবেসের কাঠামো নির্ধারণ করে।

উদাহরণ:

ধরা যাক, আপনার একটি ডেটাবেসে Employees নামের একটি টেবিল আছে এবং আপনি Employees টেবিল থেকে সমস্ত কর্মীর নাম এবং বয়স প্রিন্ট করতে চান। Entity Framework এবং LINQ to Entities ব্যবহার করে এটি করা যেতে পারে।

  1. Entity Framework মডেল তৈরি করুন
    প্রথমে EF এর মাধ্যমে ডেটাবেসের টেবিলের জন্য মডেল তৈরি করুন।
  2. LINQ to Entities কুয়েরি ব্যবহার করুন
    এখন LINQ কুয়েরি ব্যবহার করে কর্মীদের নাম এবং বয়স বের করতে পারেন।
using (var context = new MyDbContext())
{
    var employees = from emp in context.Employees
                    select new { emp.Name, emp.Age };

    foreach (var employee in employees)
    {
        Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}");
    }
}

এখানে:

  • context.Employees হল Entity Framework এর মাধ্যমে ডেটাবেসের Employees টেবিলের প্রতিনিধিত্ব।
  • from emp in context.Employees কুয়েরি লেখার মাধ্যমে আমরা ডেটাবেস থেকে সমস্ত কর্মী নির্বাচন করছি।
  • select new { emp.Name, emp.Age } ব্যবহার করে শুধুমাত্র কর্মীর নাম এবং বয়স নির্বাচন করা হচ্ছে।

LINQ to Entities এর সাথে ডেটা আপডেট, ডিলিট এবং ইনসার্ট অপারেশন

LINQ to Entities ব্যবহার করে ডেটাবেসে ডেটা আপডেট, ডিলিট এবং ইনসার্ট করা অত্যন্ত সহজ। আপনি যেভাবে LINQ কুয়েরি ব্যবহার করেন, ঠিক তেমনিভাবে Entity Framework এ অবজেক্ট তৈরি করে ডেটাবেসে তা আপডেট বা ম্যানিপুলেট করতে পারেন।

Insert Operation (ডেটা ইনসার্ট করা)

নতুন ডেটা ইনসার্ট করতে LINQ to Entities এর Add মেথড ব্যবহার করা হয়।

using (var context = new MyDbContext())
{
    var newEmployee = new Employee
    {
        Name = "John Doe",
        Age = 30,
        Position = "Software Engineer"
    };

    context.Employees.Add(newEmployee);
    context.SaveChanges();  // Changes are saved to the database
}

এখানে:

  • নতুন Employee অবজেক্ট তৈরি করা হয়েছে।
  • context.Employees.Add(newEmployee) এর মাধ্যমে ডেটাবেসে নতুন রেকর্ড ইনসার্ট করা হয়েছে।
  • context.SaveChanges() মেথড ব্যবহার করে ডেটাবেসে পরিবর্তনগুলো সেভ করা হয়েছে।

Update Operation (ডেটা আপডেট করা)

ডেটাবেসে বিদ্যমান ডেটা আপডেট করতে, প্রথমে সংশ্লিষ্ট রেকর্ডটি খুঁজে বের করতে হয় এবং তারপর তা আপডেট করা হয়।

using (var context = new MyDbContext())
{
    var employeeToUpdate = context.Employees
                                  .FirstOrDefault(e => e.Name == "John Doe");

    if (employeeToUpdate != null)
    {
        employeeToUpdate.Age = 31;  // Updating the age
        context.SaveChanges();      // Save changes to database
    }
}

এখানে:

  • FirstOrDefault() মেথডের মাধ্যমে Name এর মাধ্যমে প্রথম মিলে যাওয়া Employee রেকর্ডটি খুঁজে বের করা হয়েছে।
  • তারপর Age আপডেট করা হয়েছে এবং SaveChanges() মেথড ব্যবহার করে ডেটাবেসে সেভ করা হয়েছে।

Delete Operation (ডেটা মুছে ফেলা)

ডেটাবেস থেকে রেকর্ড মুছে ফেলতে LINQ to Entities এর Remove মেথড ব্যবহার করা হয়।

using (var context = new MyDbContext())
{
    var employeeToDelete = context.Employees
                                  .FirstOrDefault(e => e.Name == "John Doe");

    if (employeeToDelete != null)
    {
        context.Employees.Remove(employeeToDelete);  // Remove the employee
        context.SaveChanges();                       // Save changes to database
    }
}

এখানে:

  • FirstOrDefault() মেথডের মাধ্যমে মুছে ফেলার জন্য প্রথম মেলে এমন Employee রেকর্ডটি খুঁজে বের করা হয়েছে।
  • তারপর Remove() মেথড দিয়ে রেকর্ডটি মুছে ফেলা হয়েছে এবং SaveChanges() মেথড দিয়ে পরিবর্তন সেভ করা হয়েছে।

সারাংশ

LINQ to Entities আপনাকে Entity Framework এর সাহায্যে ডেটাবেসে কুয়েরি করার ক্ষমতা প্রদান করে, যাতে SQL কোড না লিখে সহজে ডেটাবেস অপারেশন করা যায়। LINQ কুয়েরি ব্যবহার করে আপনি ডেটা ইনসার্ট, আপডেট এবং ডিলিট করতে পারেন, যা ডেটাবেসের সাথে সম্পর্কিত অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত কার্যকরী। LINQ to Entities এর মাধ্যমে ডেটাবেসের সাথে কাজ করা অনেক সহজ এবং কোডের পড়তে সহজ হয়।

common.content_added_by

Entity Framework এবং LINQ

181
181

Entity Framework (EF) এবং LINQ (Language Integrated Query) দুটি গুরুত্বপূর্ণ টুল এবং কৌশল যা ডেভেলপারদের ডেটাবেসের সাথে যোগাযোগ করতে সাহায্য করে। তবে তাদের কাজের ধরন এবং ব্যবহারের ক্ষেত্রে কিছু মৌলিক পার্থক্য রয়েছে।


Entity Framework (EF)

Entity Framework (EF) হল একটি Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা .NET অ্যাপ্লিকেশনগুলির জন্য ডেটাবেসের সাথে যোগাযোগকে সরল করে। এটি ডেভেলপারদের SQL কোড না লিখেই ডেটাবেসের সাথে কাজ করার সুবিধা প্রদান করে, কারণ এটি data models (entities) এবং tables এর মধ্যে সম্পর্ক তৈরি করে।

EF-এর মাধ্যমে, ডেভেলপাররা ডেটাবেসের টেবিলগুলির জন্য ক্লাস তৈরি করতে পারেন, এবং তারপর সেই ক্লাসের মাধ্যমে ডেটা অ্যাক্সেস, ইনসার্ট, আপডেট, ডিলিট এবং রিড অপারেশন করতে পারেন। EF ৩টি প্রধানভাবে ব্যবহৃত পদ্ধতিতে কাজ করে:

  1. Code First
  2. Database First
  3. Model First

EF আপনাকে ডেটাবেস টেবিলের জন্য ক্লাস তৈরি করে, এবং সেই ক্লাসের মাধ্যমে ডেটাবেসের সব অপারেশন পরিচালনা করতে দেয়।


LINQ (Language Integrated Query)

LINQ হল একটি কোড ভাষায় সমর্থিত কুয়েরি লেখার কৌশল যা ডেভেলপারদের ডেটা কুয়েরি, ফিল্টার, সাজানো, এবং গ্রুপিং করার জন্য সমর্থন প্রদান করে। এটি C# বা VB.NET-এ ডেটাবেস, XML, এবং অন্যান্য ডেটা সোর্সের ওপর কুয়েরি চালাতে ব্যবহার করা হয়। LINQ-এ সাধারণত C# কোডের মধ্যে SQL-like কুয়েরি সঠিকভাবে রচনা করা যায়, যা ডেটা ফিল্টার এবং প্রসেসিং সহজ করে।


Entity Framework এবং LINQ-এর মধ্যে সম্পর্ক

Entity Framework এবং LINQ একে অপরের সাথে গভীরভাবে যুক্ত, কারণ EF এর মাধ্যমে ডেটাবেসের ডেটার উপর কাজ করার সময় আপনি LINQ কুয়েরি ব্যবহার করতে পারেন। EF টেবিলগুলির entity class তৈরি করে, এবং LINQ ব্যবহার করে আপনি সেই ক্লাসের উপর কুয়েরি চালাতে পারেন।

এখানে LINQ to Entities নামে একটি বৈশিষ্ট্য রয়েছে যা Entity Framework-এর সাথে একত্রিতভাবে কাজ করে, যাতে আপনি EF ক্লাসের উপর LINQ কুয়েরি চালাতে পারেন।


LINQ to Entities

LINQ to Entities হল LINQ-এর একটি কৌশল যা Entity Framework এর সঙ্গে কাজ করে। এটি ডেটাবেসে সংরক্ষিত entities (যেমন, টেবিলের রেকর্ড) এর সাথে LINQ কুয়েরি ব্যবহার করার সুযোগ দেয়। এতে আপনি SQL কোড না লিখে সরাসরি C# কোড-এ LINQ কুয়েরি ব্যবহার করতে পারেন।


LINQ এবং Entity Framework-এর উদাহরণ

ধরা যাক, আমাদের একটি Customers টেবিল এবং Orders টেবিল রয়েছে, এবং আমরা LINQ to Entities ব্যবহার করে কিছু ডেটা রিট্রাইভ করতে চাই।

Entity Classes (Code First Approach):

public class Customer
{
    public int CustomerID { get; set; }
    public string CustomerName { get; set; }
    public string Email { get; set; }
}

public class Order
{
    public int OrderID { get; set; }
    public int CustomerID { get; set; }
    public string OrderAmount { get; set; }
    public virtual Customer Customer { get; set; }
}

এখানে, Customer এবং Order ক্লাসগুলো Entity Framework ব্যবহার করে টেবিলের প্রতিনিধিত্ব করে।


LINQ Query Example (Customers এবং Orders টেবিলের ডেটা রিট্রাইভ করা):

using (var context = new MyDataContext())
{
    var customersWithOrders = from customer in context.Customers
                              join order in context.Orders on customer.CustomerID equals order.CustomerID
                              select new
                              {
                                  customer.CustomerName,
                                  customer.Email,
                                  order.OrderAmount
                              };

    foreach (var item in customersWithOrders)
    {
        Console.WriteLine($"Customer: {item.CustomerName}, Email: {item.Email}, Order Amount: {item.OrderAmount}");
    }
}

এখানে, LINQ to Entities ব্যবহার করে Customers এবং Orders টেবিলের ডেটা join করা হয়েছে এবং select ক্লজ দিয়ে প্রয়োজনীয় তথ্য রিটার্ন করা হয়েছে। এটি ডাটাবেসে সোজা SQL Query হিসেবে রূপান্তরিত হবে।


Entity Framework-এর মাধ্যমে CRUD অপারেশন

Entity Framework LINQ-এর মাধ্যমে ডেটাবেসের বিভিন্ন অপারেশন (CRUD) করতে সহায়তা করে। নিম্নলিখিত প্রতিটি অপারেশনের উদাহরণ দেওয়া হল:

Create (নতুন রেকর্ড তৈরি করা):

using (var context = new MyDataContext())
{
    var newCustomer = new Customer
    {
        CustomerName = "Alice",
        Email = "alice@example.com"
    };

    context.Customers.Add(newCustomer);
    context.SaveChanges();
}

এখানে, SaveChanges() মেথড ব্যবহার করে Customers টেবিলে নতুন রেকর্ড ইনসার্ট করা হয়েছে।

Read (ডেটা রিট্রাইভ করা):

using (var context = new MyDataContext())
{
    var customers = from customer in context.Customers
                    where customer.CustomerName.StartsWith("A")
                    select customer;

    foreach (var customer in customers)
    {
        Console.WriteLine($"Customer: {customer.CustomerName}, Email: {customer.Email}");
    }
}

এখানে, LINQ Query ব্যবহার করে CustomerName "A"-এর শুরু হওয়া গ্রাহকদের তথ্য রিট্রাইভ করা হয়েছে।

Update (ডেটা আপডেট করা):

using (var context = new MyDataContext())
{
    var customer = context.Customers.SingleOrDefault(c => c.CustomerID == 1);
    
    if (customer != null)
    {
        customer.Email = "newemail@example.com";
        context.SaveChanges();
    }
}

এখানে, CustomerID 1 এর গ্রাহকটি খুঁজে বের করা হয়েছে এবং তার ইমেইল আপডেট করা হয়েছে।

Delete (ডেটা ডিলিট করা):

using (var context = new MyDataContext())
{
    var customer = context.Customers.SingleOrDefault(c => c.CustomerID == 1);
    
    if (customer != null)
    {
        context.Customers.Remove(customer);
        context.SaveChanges();
    }
}

এখানে, CustomerID 1 এর গ্রাহকটি খুঁজে বের করে, সেটি ডিলিট করা হয়েছে।


Entity Framework এবং LINQ এর সুবিধা

  1. Code-First Approach: Entity Framework Code First মাধ্যমে ডেটাবেস ডিজাইন করা যায়, যেখানে আপনি কোড দিয়ে ডেটাবেস মডেল তৈরি করেন।
  2. LINQ Query Integration: LINQ-এর মাধ্যমে ডেটাবেস কুয়েরি করা সহজ এবং বোধগম্য হয়, কারণ এটি SQL Query লিখে ডেটাবেস অপারেশন করতে হয় না।
  3. Automatic SQL Generation: LINQ to Entities ব্যবহার করে EF আপনার LINQ কুয়েরি থেকে স্বয়ংক্রিয়ভাবে SQL তৈরি করে।
  4. Cross-Database Support: Entity Framework বিভিন্ন ডেটাবেস যেমন SQL Server, SQLite, MySQL এর সঙ্গে কাজ করতে পারে।

Entity Framework এবং LINQ-এর মধ্যে পার্থক্য

  • Entity Framework একটি ORM ফ্রেমওয়ার্ক, যা ডেটাবেসের সাথে কাজ করার জন্য একটি ক্লাস ভিত্তিক মডেল প্রদান করে। এতে ডেটাবেসের সাথে সম্পর্কিত সমস্ত কাজ code এবং model এর মাধ্যমে করা হয়।
  • LINQ একটি কুয়েরি ভাষা, যা C# বা VB.NET কোডে ডেটা ফিল্টার, সাজানো, গ্রুপিং ইত্যাদি করতে সহায়তা করে, তবে LINQ শুধুমাত্র কোডের মধ্যে কুয়েরি লেখার পদ্ধতি সরবরাহ করে, ডেটাবেসের সাথে কাজ করার জন্য Entity Framework বা অন্য কোন টুল ব্যবহৃত হয়।

সমাপ্তি

Entity Framework এবং LINQ একত্রে ব্যবহার করলে ডেটাবেসের সাথে কাজ করার প্রক্রিয়া সহজ, দ্রুত, এবং কার্যকরী হয়ে ওঠে। EF ডেটাবেসের সাথে যোগাযোগের জন্য ORM পদ্ধতি ব্যবহার করে, যেখানে LINQ কোডে SQL কুয়েরি লেখার সুবিধা দেয়।

common.content_added_by

DbContext এবং Model ব্যবহার

184
184

DbContext এবং Model হল Entity Framework এর দুটি গুরুত্বপূর্ণ উপাদান, যা ডেটাবেসে ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়। DbContext ক্লাসটি ডেটাবেসের সাথে যোগাযোগের জন্য এবং Model ক্লাসগুলি ডেটাবেসের টেবিলগুলির প্রতিনিধিত্ব করে।


DbContext এর পরিচিতি

DbContext হল Entity Framework এর মূল ক্লাস, যা ডেটাবেসের টেবিলের সাথে যোগাযোগের মাধ্যম হিসেবে কাজ করে। এই ক্লাসটি ডেটাবেসের সাথে CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করতে ব্যবহৃত হয় এবং এটি DbSet প্রপার্টি ব্যবহার করে টেবিলের ডেটার সাথে কাজ করে।

DbContext ক্লাসের মাধ্যমে, আপনি LINQ কুয়েরি ব্যবহার করতে পারেন, ডেটাবেসে নতুন রেকর্ড যুক্ত করতে পারেন, এবং ডেটাবেসের তথ্য আপডেট বা মুছে ফেলতে পারেন।


DbContext ক্লাস তৈরি করা

প্রথমে, একটি DbContext ক্লাস তৈরি করতে হবে যা আপনার ডেটাবেসের সাথে সংযোগ স্থাপন করবে এবং ডেটাবেসের টেবিলগুলোকে DbSet প্রপার্টির মাধ্যমে ব্যবহার করবে।

public class ApplicationDbContext : DbContext
{
    public DbSet<Student> Students { get; set; }
    public DbSet<Course> Courses { get; set; }
    
    public ApplicationDbContext(string connectionString) : base(connectionString) { }
}

এখানে Students এবং Courses হলো ডেটাবেসের টেবিল এবং DbSet এবং DbSet এই টেবিলের ডেটা অ্যাক্সেস করতে ব্যবহৃত হবে। ApplicationDbContext ক্লাসটি ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়।


Model এর পরিচিতি

Model ক্লাসগুলো Entity Framework-এ ডেটাবেসের টেবিলগুলোর প্রতিনিধিত্ব করে। প্রতিটি Model ক্লাস একটি ডেটাবেস টেবিলের সারি (row) এবং ফিল্ড (column)-এর মতো হতে পারে। এগুলো সাধারণত POCO (Plain Old CLR Object) ক্লাস হিসেবে তৈরি করা হয়, যার মধ্যে প্রপার্টি থাকে যা টেবিলের কলামগুলোর সাথে ম্যাচ করে।


Model ক্লাস তৈরি করা

এখন, প্রতিটি টেবিলের জন্য একটি Model ক্লাস তৈরি করতে হবে। উদাহরণস্বরূপ, একটি Student এবং একটি Course মডেল তৈরি করা যেতে পারে।

public class Student
{
    public int StudentID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Course
{
    public int CourseID { get; set; }
    public string CourseName { get; set; }
}

এখানে Student ক্লাসটি একটি ছাত্রের তথ্য ধারণ করে এবং Course ক্লাসটি কোর্সের তথ্য ধারণ করে।


DbContext এবং Model এর মাধ্যমে ডেটাবেসে কাজ করা

DbContext এবং Model ক্লাস ব্যবহার করে আপনি ডেটাবেসে CRUD অপারেশন করতে পারবেন। উদাহরণস্বরূপ, ডেটাবেসে একটি নতুন ছাত্র যোগ করা এবং সমস্ত ছাত্রের তালিকা পড়া:

using (var context = new ApplicationDbContext("your_connection_string"))
{
    // Insert operation
    var newStudent = new Student { Name = "John", Age = 20 };
    context.Students.Add(newStudent);
    context.SaveChanges(); // Changes to the database

    // Read operation
    var students = context.Students.ToList();
    foreach (var student in students)
    {
        Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
    }
}

এখানে, ApplicationDbContext এর মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করা হচ্ছে এবং Students টেবিলের নতুন ডেটা ইনসার্ট করা হচ্ছে। এছাড়া, Students টেবিলের সব রেকর্ড পড়া হচ্ছে এবং কনসোলে আউটপুট দেখানো হচ্ছে।


DbContext এবং Model এর মধ্যে সম্পর্ক

DbContext হল আপনার ডেটাবেসের সাথে যোগাযোগের মাধ্যম, যেখানে Model ক্লাসগুলো ডেটাবেসের টেবিলের প্রতিনিধিত্ব করে। DbContext এর DbSet প্রপার্টি গুলি ব্যবহৃত হয় টেবিলের ডেটার উপর অপারেশন করার জন্য।

এভাবে DbContext এবং Model একসাথে ব্যবহার করে আপনি Entity Framework-এর মাধ্যমে ডেটাবেসের বিভিন্ন কার্যক্রম সম্পাদন করতে পারেন, যেমন:

  • টেবিলের ডেটা ইনসার্ট করা,
  • ডেটা আপডেট বা মুছে ফেলা,
  • ডেটা পড়া (Select Query),
  • ডেটাবেসের সাথে সম্পর্কিত অন্যান্য কার্যক্রম পরিচালনা করা।
common.content_added_by

LINQ ব্যবহার করে ডেটা ফেচ এবং ম্যানিপুলেশন

161
161

LINQ (Language Integrated Query) .NET প্ল্যাটফর্মে ডেটা ম্যানিপুলেশনের জন্য একটি শক্তিশালী টুল, যা ডেটাকে ফেচ এবং ম্যানিপুলেট করতে সহায়ক। LINQ এর মাধ্যমে আপনি শুধুমাত্র ডেটা অনুসন্ধানই করতে পারেন না, বরং সেই ডেটা পরিবর্তন, ফিল্টার, গ্রুপ, সাজানো (sorting), গ্রুপিং, অ্যাগ্রিগেট করা এবং অন্যান্য ম্যানিপুলেশন করতে পারেন। LINQ ব্যবহার করে Entity Framework বা অন্যান্য ডেটাবেস থেকেও ডেটা ম্যানিপুলেট করা যায়।

এখানে LINQ ব্যবহার করে ডেটা ফেচ এবং ম্যানিপুলেশন এর কিছু গুরুত্বপূর্ণ ধারণা এবং উদাহরণ দেওয়া হলো।


LINQ Query Syntax দিয়ে ডেটা ফেচ এবং ম্যানিপুলেশন

LINQ তে Query Syntax ব্যবহার করলে SQL স্টাইলে কোয়েরি লেখা যায়, যা অনেকটা SQL কোডের মতো। এই সিনট্যাক্সটি ডেটা ফেচ করার জন্য এবং সেটি ম্যানিপুলেট করার জন্য ব্যবহৃত হয়।

উদাহরণ:

using (var context = new ApplicationDbContext())
{
    // ডেটা ফেচ এবং ফিল্টার করা
    var query = from person in context.People
                where person.Age > 30
                orderby person.Name ascending
                select person;

    foreach (var person in query)
    {
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

এখানে, Query Syntax ব্যবহার করে context.People টেবিল থেকে Age > 30 শর্তে ডেটা ফেচ করা হয়েছে এবং সাজানো হয়েছে Name অনুসারে।


LINQ Method Syntax দিয়ে ডেটা ফেচ এবং ম্যানিপুলেশন

LINQ তে Method Syntax ব্যবহার করলে Where(), Select(), OrderBy(), GroupBy() ইত্যাদি মেথড দিয়ে ডেটা ম্যানিপুলেট করা যায়। এটি Lambda Expressions ব্যবহার করে কোয়েরি তৈরির একটি পদ্ধতি।

উদাহরণ:

using (var context = new ApplicationDbContext())
{
    // Method Syntax ব্যবহার করে ডেটা ফেচ এবং ফিল্টার করা
    var query = context.People
                        .Where(p => p.Age > 30)
                        .OrderBy(p => p.Name)
                        .ToList();

    foreach (var person in query)
    {
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

এখানে, Method Syntax ব্যবহার করা হয়েছে যেখানে Where() মেথড দিয়ে ৩০ এর বেশি বয়সের লোকদের ফিল্টার করা হয়েছে এবং OrderBy() দিয়ে সাজানো হয়েছে।


ডেটা ম্যানিপুলেশন (Manipulating Data)

LINQ এর মাধ্যমে আপনি ডেটা ম্যানিপুলেশন যেমন, ফিল্টারিং, গ্রুপিং, অ্যাগ্রিগেটিং, মডিফাইং ইত্যাদি কার্য সম্পাদন করতে পারেন।

ফিল্টারিং (Filtering)

Where() মেথড ব্যবহার করে আপনি নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার করতে পারেন।

using (var context = new ApplicationDbContext())
{
    var adults = context.People
                        .Where(p => p.Age >= 18)
                        .ToList();

    foreach (var person in adults)
    {
        Console.WriteLine($"Adult: {person.Name}, Age: {person.Age}");
    }
}

এখানে, Where() মেথড ব্যবহার করে Age >= 18 শর্তে ফিল্টার করা হয়েছে এবং শুধু বড়দের নাম প্রিন্ট করা হয়েছে।

গ্রুপিং (Grouping)

LINQ তে GroupBy() ব্যবহার করে আপনি ডেটাকে গ্রুপ করতে পারেন। উদাহরণস্বরূপ, ডেটাকে বিভাগ (Department) বা বয়সের উপর ভিত্তি করে গ্রুপ করা।

using (var context = new ApplicationDbContext())
{
    var groupedByDepartment = context.People
                                     .GroupBy(p => p.Department)
                                     .Select(g => new
                                     {
                                         Department = g.Key,
                                         People = g.ToList()
                                     });

    foreach (var group in groupedByDepartment)
    {
        Console.WriteLine($"Department: {group.Department}");
        foreach (var person in group.People)
        {
            Console.WriteLine($"  Name: {person.Name}, Age: {person.Age}");
        }
    }
}

এখানে, GroupBy() মেথড ব্যবহার করে Department অনুসারে গ্রুপ করা হয়েছে এবং প্রতিটি গ্রুপের সদস্যদের নাম ও বয়স প্রিন্ট করা হয়েছে।

অ্যাগ্রিগেশন (Aggregation)

LINQ তে Sum(), Count(), Average(), Min(), Max() মেথড ব্যবহার করে ডেটার উপর অ্যাগ্রিগেশন অপারেশন করা যায়।

using (var context = new ApplicationDbContext())
{
    var totalAge = context.People
                          .Where(p => p.Age > 18)
                          .Sum(p => p.Age);

    Console.WriteLine($"Total Age of Adults: {totalAge}");
}

এখানে, Sum() মেথড ব্যবহার করে Age এর যোগফল বের করা হয়েছে যাদের বয়স ১৮ এর বেশি।

সাজানো (Sorting)

LINQ তে OrderBy() এবং OrderByDescending() ব্যবহার করে ডেটা সাজানো যায়।

using (var context = new ApplicationDbContext())
{
    var sortedByAge = context.People
                             .OrderBy(p => p.Age)  // Ascending order
                             .ToList();

    foreach (var person in sortedByAge)
    {
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

এখানে, OrderBy() মেথড ব্যবহার করে Age এর ভিত্তিতে ডেটা সাজানো হয়েছে (Ascending Order)।

প্রথম বা একক রেকর্ড ফেচ করা (Fetching First or Single Record)

FirstOrDefault() বা SingleOrDefault() মেথড ব্যবহার করে আপনি প্রথম বা একক রেকর্ড ফেচ করতে পারেন।

using (var context = new ApplicationDbContext())
{
    var person = context.People
                        .FirstOrDefault(p => p.Name == "Alice");

    if (person != null)
    {
        Console.WriteLine($"Found: {person.Name}, Age: {person.Age}");
    }
}

এখানে, FirstOrDefault() মেথড ব্যবহার করে "Alice" নামের প্রথম রেকর্ডটি ফেচ করা হয়েছে।


LINQ ব্যবহার করে ডেটা আপডেট এবং মুছে ফেলা

LINQ এর মাধ্যমে ডেটা ফেচ করার পাশাপাশি, Entity Framework ব্যবহার করে ডেটা আপডেট (update) এবং মুছে ফেলা (delete) করা যেতে পারে।

ডেটা আপডেট (Updating Data)

using (var context = new ApplicationDbContext())
{
    var person = context.People
                        .FirstOrDefault(p => p.Name == "Alice");

    if (person != null)
    {
        person.Age = 26;  // Age আপডেট করা
        context.SaveChanges();  // পরিবর্তন সেভ করা
    }
}

এখানে, "Alice" নামের ব্যক্তির বয়স আপডেট করা হয়েছে এবং SaveChanges() এর মাধ্যমে পরিবর্তন সেভ করা হয়েছে।

ডেটা মুছে ফেলা (Deleting Data)

using (var context = new ApplicationDbContext())
{
    var person = context.People
                        .FirstOrDefault(p => p.Name == "Bob");

    if (person != null)
    {
        context.People.Remove(person);  // ডেটা মুছে ফেলা
        context.SaveChanges();  // পরিবর্তন সেভ করা
    }
}

এখানে, "Bob" নামের ব্যক্তির রেকর্ড মুছে ফেলা হয়েছে।


সারাংশ

LINQ একটি শক্তিশালী এবং সহজ পদ্ধতি যা ডেটাকে ফেচ এবং ম্যানিপুলেট করার জন্য ব্যবহৃত হয়। LINQ এর মাধ্যমে ডেটা ফেচ, ফিল্টার, গ্রুপিং, অ্যাগ্রিগেশন, সাজানো, এবং আপডেট করা সহজ এবং প্রাকৃতিকভাবে করা সম্ভব। Entity Framework এর সাহায্যে আপনি LINQ ব্যবহার করে ডাটাবেস থেকে ডেটা ফেচ এবং ম্যানিপুলেট করতে পারেন। LINQ এর Method Syntax এবং Query Syntax উভয়ই ডেটা ম্যানিপুলেশনের জন্য সহায়ক।

common.content_added_by

Complex Queries এবং Navigation Properties

200
200

LINQ (Language Integrated Query) এর মাধ্যমে আপনি complex queries করতে পারেন এবং navigation properties ব্যবহার করে relational data সম্পর্কিত তথ্য পরিচালনা করতে পারেন। এর মাধ্যমে আপনি বিভিন্ন টেবিল বা ক্লাসের মধ্যে সম্পর্ক (relationships) খুঁজে বের করতে পারেন এবং প্রাসঙ্গিক ডেটা একত্রিত করতে পারেন।


Complex Queries

LINQ তে complex queries বলতে বোঝানো হয় একাধিক শর্তের মধ্যে তথ্য অনুসন্ধান, বিভিন্ন অপারেশন একত্রে ব্যবহার করা, বা ডেটা ফিল্টারিং, গ্রুপিং এবং অর্ডারিং একত্রে করা। LINQ তে complex queries তৈরি করতে সাধারণত from, where, select, group by, order by, join, let ইত্যাদি কিওয়ার্ড ব্যবহার করা হয়।

উদাহরণ:

ধরা যাক, আমাদের দুটি তালিকা রয়েছে — একটিতে Employee ক্লাসের তথ্য এবং অন্যটিতে Department ক্লাসের তথ্য। এখন, আমরা কর্মীদের তথ্য ডিপার্টমেন্টের নামে সাজিয়ে দেখব।

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int DepartmentId { get; set; }
}

public class Department
{
    public int DepartmentId { get; set; }
    public string DepartmentName { get; set; }
}

List<Employee> employees = new List<Employee>
{
    new Employee { Name = "Alice", Age = 30, DepartmentId = 1 },
    new Employee { Name = "Bob", Age = 25, DepartmentId = 2 },
    new Employee { Name = "Charlie", Age = 35, DepartmentId = 1 }
};

List<Department> departments = new List<Department>
{
    new Department { DepartmentId = 1, DepartmentName = "HR" },
    new Department { DepartmentId = 2, DepartmentName = "IT" }
};

// Complex query: Join Employee এবং Department ক্লাসের ডেটা
var query = from emp in employees
            join dept in departments on emp.DepartmentId equals dept.DepartmentId
            orderby dept.DepartmentName
            select new { emp.Name, emp.Age, dept.DepartmentName };

foreach (var item in query)
{
    Console.WriteLine($"Name: {item.Name}, Age: {item.Age}, Department: {item.DepartmentName}");
}

এখানে:

  • join কিওয়ার্ড ব্যবহার করে Employee এবং Department ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়েছে।
  • orderby দ্বারা ডিপার্টমেন্টের নাম অনুযায়ী কর্মীদের সাজানো হয়েছে।

আউটপুট:

Name: Alice, Age: 30, Department: HR
Name: Charlie, Age: 35, Department: HR
Name: Bob, Age: 25, Department: IT

এটি একটি complex query উদাহরণ যেখানে একাধিক শর্তের মধ্যে ডেটা সংগ্রহ করা হয়েছে এবং বিভিন্ন অপারেশন একত্রে ব্যবহার করা হয়েছে।


Navigation Properties

Navigation properties একটি ORM (Object-Relational Mapping) সিস্টেমের মাধ্যমে এক ক্লাস বা টেবিলের মধ্যে সম্পর্কিত অন্যান্য ক্লাস বা টেবিলের তথ্য প্রদর্শন করতে ব্যবহৃত হয়। Entity Framework (EF) Core এর মাধ্যমে, আপনি navigation properties ব্যবহার করে একটি ক্লাসের মধ্যে সম্পর্কিত অন্য ক্লাসের ডেটা রিট্রিভ করতে পারেন।

ধরা যাক, আমাদের একটি Student এবং Course ক্লাস আছে এবং আমরা জানি যে, এক ছাত্র একাধিক কোর্সে ভর্তি হতে পারে। এখানে Student এবং Course এর মধ্যে one-to-many relationship রয়েছে।

উদাহরণ:

public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public List<Course> Courses { get; set; }  // Navigation property
}

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public int StudentId { get; set; }
    public Student Student { get; set; }  // Navigation property
}

List<Student> students = new List<Student>
{
    new Student { StudentId = 1, Name = "Alice", Courses = new List<Course> {
        new Course { CourseId = 1, CourseName = "Math" },
        new Course { CourseId = 2, CourseName = "English" }
    }},
    new Student { StudentId = 2, Name = "Bob", Courses = new List<Course> {
        new Course { CourseId = 3, CourseName = "Physics" },
        new Course { CourseId = 4, CourseName = "Chemistry" }
    }}
};

// Navigation property ব্যবহার করে Student এর Courses দেখতে হবে
var query = from student in students
            select new 
            {
                student.Name,
                Courses = student.Courses.Select(c => c.CourseName)
            };

foreach (var item in query)
{
    Console.WriteLine($"Student: {item.Name}");
    foreach (var course in item.Courses)
    {
        Console.WriteLine($"  Course: {course}");
    }
}

এখানে:

  • Courses হল একটি navigation property যা Student ক্লাসের মধ্যে সম্পর্কিত Course ক্লাসের তথ্য ধরে রাখে।
  • student.Courses.Select(c => c.CourseName) ব্যবহার করে, ছাত্রদের কোর্সের নাম বের করা হচ্ছে।

আউটপুট:

Student: Alice
  Course: Math
  Course: English
Student: Bob
  Course: Physics
  Course: Chemistry

এখানে Courses প্রপার্টি Student ক্লাসের navigation property, যা Student এবং Course ক্লাসের মধ্যে সম্পর্কিত তথ্য তুলে ধরছে।


One-to-Many Relationship Example (Navigation Properties)

Entity Framework এ One-to-Many সম্পর্কের মধ্যে Student এবং Course ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়, যেখানে একটি ছাত্র একাধিক কোর্সে ভর্তি হতে পারে।

Entity Framework Core ব্যবহার করার সময়:

public class ApplicationDbContext : DbContext
{
    public DbSet<Student> Students { get; set; }
    public DbSet<Course> Courses { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
                    .HasMany(s => s.Courses)
                    .WithOne(c => c.Student)
                    .HasForeignKey(c => c.StudentId);
    }
}

এখানে:

  • HasMany(s => s.Courses) বলে, একটি Student এর অনেকগুলো Course থাকতে পারে।
  • WithOne(c => c.Student) বলে, প্রতিটি Course এর একটিমাত্র Student থাকতে হবে।

Complex Query with Navigation Properties

এখন, যদি আপনি complex query করতে চান যেখানে navigation properties ব্যবহার করা হচ্ছে, যেমন, সমস্ত ছাত্র এবং তাদের কোর্সের নাম বের করতে:

var query = from student in students
            select new 
            {
                student.Name,
                Courses = student.Courses.Select(c => c.CourseName)
            };

foreach (var item in query)
{
    Console.WriteLine($"Student: {item.Name}");
    foreach (var course in item.Courses)
    {
        Console.WriteLine($"  Course: {course}");
    }
}

এখানে, Student এর Courses নামক navigation property ব্যবহার করে ছাত্রদের কোর্সের নাম বের করা হয়েছে।


সারাংশ

  • Complex Queries: LINQ তে একাধিক অপারেশন একত্রে ব্যবহার করে জটিল প্রশ্ন করা যায়, যেমন join, group by, orderby, let, এবং select
  • Navigation Properties: Entity Framework এ, navigation properties ব্যবহৃত হয় এক ক্লাস থেকে আরেক ক্লাসের সাথে সম্পর্কিত ডেটা পরিচালনা করতে। One-to-Many বা Many-to-Many সম্পর্কের ক্ষেত্রে এটি অত্যন্ত গুরুত্বপূর্ণ।

এটি ডেটাবেসের মধ্যে সম্পর্কিত তথ্যকে কোয়েরি করার এবং সম্পর্কিত ডেটা একত্রিত করার একটি শক্তিশালী পদ্ধতি।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion